package com.qf.file.utils;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageConfig;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * @author 30909
 * QRCode 是二维码
 * 以下是二维码的工具类
 */
public class QFCodeUtil {


    /**
     * 生成二维码的方法
     * @param content  二维码携带信息
     * @param codeColor     码的颜色
     * @param bgColor       背景颜色
     * @param w             二维码的款
     * @param h             二维码的高
     * @return          返回的二维码图片对象
     */
    public static BufferedImage qfEncode(String content,int codeColor,int bgColor,int w,int h){
        //实例话二维码的元素属性
        Map<EncodeHintType,Object> hints = new HashMap<>();
        //二维码的属性：内容编码
        hints.put(EncodeHintType.CHARACTER_SET,"utf-8");
        //二维码的属性：纠错等级
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
        //二维码的属性： 上下左右的留白的宽度
        hints.put(EncodeHintType.MARGIN,1);


        BufferedImage bufferedImage = null;
        try {
            //绘制二维码的像素点信息
            BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE,w,h,hints);
            //设置二维码的颜色
            MatrixToImageConfig config = new MatrixToImageConfig(codeColor,bgColor);
            //将二维码和颜色配置到一起，生成最终的验证吗
            bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix,config);
        }catch (WriterException e){
            e.printStackTrace();
        }
        //返回一张处理完成的图片
        return bufferedImage;
    }

    /**
     * 测试方法
     * @param args
     */
    public static void main(String[] args) throws IOException {
        BufferedImage bufferedImage = qfEncode("@卡卡西",0xffff0000,0xffffffff,200,200);
        //x 图片写入流
        ImageIO.write(bufferedImage,"jpg",new File("C:\\test\\QFCodeUtil\\erweima.jpg"));
    }

}
